package com.whfc.ms.api.emp.service;

import com.whfc.common.result.PageData;
import com.whfc.emp.dto.*;
import com.whfc.emp.param.*;
import com.whfc.entity.dto.OssPathDTO;

import java.util.Date;
import java.util.List;

/**
 * @Description 人员考勤中心
 * @Author hw
 * @Date 2020/12/23 9:26
 * @Version 1.0
 */
public interface MsAppEmpAttendService {

    /**
     * 人员管理-日考勤记录列表
     *
     * @param pageNum
     * @param pageSize
     * @param date
     * @param deptId
     * @param corpId
     * @param groupId
     * @param keyword
     * @param attendState
     * @return
     * @throws Exception
     */
    PageData<AttendDayEmpDTO> attendDayList(Integer pageNum, Integer pageSize, Date date, Integer deptId, Integer corpId,
                                            Integer groupId, String keyword, Integer attendState);

    /**
     * 人员管理-月考勤记录列表
     *
     * @param pageNum
     * @param pageSize
     * @param time
     * @param deptId
     * @param corpId
     * @param groupId
     * @param keyword
     * @return
     */
    PageData<AppEmpAttendMonthDTO> attendMonthList(Integer pageNum, Integer pageSize, Date time, Integer deptId,
                                                   Integer corpId, Integer groupId, String keyword);


    /**
     * 导出人员月考勤记录
     *
     * @param request
     * @return
     * @throws Exception
     */
    OssPathDTO exportMonthReport(EmpMonthReportExportParam request) throws Exception;

    /**
     * 导出人员日考勤记录
     *
     * @param request
     * @return
     * @throws Exception
     */
    OssPathDTO exportDayReport(EmpDayReportExportParam request) throws Exception;


    /**
     * 项目人员每日统计
     *
     * @param pageNum
     * @param pageSize
     * @param deptId
     * @param startDate
     * @param endDate
     * @return
     */
    PageData<EmpDataDTO> empDayList(Integer deptId, Date startDate, Date endDate, Integer pageNum, Integer pageSize);

    /**
     * 项目人员计划设置
     *
     * @param plan
     */
    void setEmpDataPlan(EmpAttendPlan plan);


    /**
     * 人员管理-gps记录
     *
     * @param empId
     * @param date
     * @return
     */
    List<AppEmpGpsDTO> attendGpsList(Integer empId, Date date);

    /**
     * 考勤方式设置
     *
     * @param request
     */
    void setAttendType(AppEmpAttendTypeSetParam request);

    /**
     * 获取组织机构的考勤方式
     *
     * @param deptId
     * @return
     */
    AppEmpAttendTypeDTO getAttendType(Integer deptId);


    /**
     * 打卡记录
     *
     * @param empId
     * @param date
     * @param pageNum
     * @param pageSize
     * @param state
     * @return
     */
    PageData<AppEmpAttendRecordDTO> attendRecord(Integer empId, Date date, Integer pageNum, Integer pageSize, Integer state);

    /**
     * 人员管理-人脸识别记录
     *
     * @param deptId
     * @param keyword
     * @param startTime
     * @param endTime
     * @return
     */
    PageData<AppFaceGateRecordDTO> attendFaceGateList(Integer pageNum, Integer pageSize, Integer deptId, String keyword, Date startTime, Date endTime);

    /**
     * 人员管理-访客记录
     *
     * @param pageNum
     * @param pageSize
     * @param deptId
     * @param startTime
     * @param endTime
     * @return
     */
    PageData<AppFaceGateRecordDTO> visitorList(Integer pageNum, Integer pageSize, Integer deptId, Date startTime, Date endTime);

    /**
     * 导出识别记录
     *
     * @param param
     * @return
     */
    OssPathDTO faceGateRecordExport(FaceGateRecordExportParam param) throws Exception;

    /**
     * 人员管理-日考勤记录统计
     *
     * @param date
     * @param deptId
     * @param corpId
     * @param groupId
     * @param keyword
     * @param empId
     * @return
     */
    AppEmpAttendDayNumDTO attendDayNum(Date date, Integer deptId, Integer corpId, Integer groupId, String keyword, Integer empId);

    /**
     * 人员管理-智能闸机-导出访客记录
     * @param deptId
     * @param startTime
     * @param endTime
     * @return
     */
    OssPathDTO visitorListExport(Integer deptId, Date startTime, Date endTime);

    List<AppFaceGateRecordDTO> discernList(Integer deptId, Date startTime, Date endTime,Integer type);

    List<AppFaceGateRecordDTO> temperatureAbnormalList(Integer deptId,Date startTime, Date endTime);

    void syncRecord(AppEmpAttendSyncParam request);
}
